package 题目集.前缀和.枚举;

import java.util.Scanner;

//https://www.acwing.com/problem/content/1232/

/**
 * 在朴素算法中
 * 我们是通过枚举所有区间终点r。
 * 再枚举r左侧的所有起点l,(r-1到1)。
 * 判断这些S[r]-S[l]是否为k的倍数。是则ans++
 * 这样的时间复杂度是O(n^2)
 *
 * 而我们并不需要枚举所有的l。
 * 因为(S[r]-S[l])%k==0，等同于S[r]%k==S[l]%k
 * 即只需要统计在r之前，有多少个S[l]%k与S[r]%k相同，既可以算出S[k]区间内所有符合条件的值。
 * 我们可以用哈希表来存储S[l]%k的个数。
 * 这样的时间复杂度是O(n)
 */
public class K倍区间哈希表与数论 {
    static int n;
    static int k;
    static long[] pre;
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        n= sc.nextInt();
        k= sc.nextInt();
        pre=new long[n+1];
        for (int i = 1; i < pre.length; i++) {
            pre[i]=sc.nextInt();
            pre[i]+=pre[i-1];
        }
        long res=0;
        int[] mods=new int[k];
        mods[0]=1;  //这个是为了处理S[l]%k==0的情况
        for (int i = 1; i < pre.length; i++) {
            int m = (int) (pre[i] % k);
            res+=mods[m];   //这里是加上之前的S[l]%k==S[r]%k的个数
            mods[m]++;  //更新S[l]%k的个数
        }
        System.out.println(res);
    }
}
